/*
 * ArchivosUtil.h
 *
 *  Created on: 02/09/2012
 *      Author: marcos
 */

#ifndef ARCHIVOSUTIL_H_
#define ARCHIVOSUTIL_H_

#include <iostream>
#include <vector>
#include <string.h>
#include <algorithm>
#include <fstream>
#include <dirent.h>
#include <sys/types.h>
#include <math.h>
#include "../constantes/Constantes.h"
#include "../entidades/RegistroAuxiliar.h"
#include "../utiles/StringUtil.h"
using namespace std;

class ArchivosUtil {
public:
	ArchivosUtil();
	bool generarArchivoInicial(string entrada, string salida, int numDoc);
	bool generarArchivoInicialDesdeDirectorio(string rutaDocumento, string salid,string rutaReferencias);
	bool generarArchivoAuxiliar(string entrada, string salida);
	bool esTermino(string cadena);
	vector<string> devolverTerminos(string linea);
	virtual ~ArchivosUtil();
	void tratarSeguimiento(char* linea,vector<string>* result);
	int getCantBloques();
	void setCantBloques(int cant);
	double getCantBytes();
	void setCantBytes(double cant);
	void ordenarUnBloque(string nombreBloque);
	void generarMatriz(string nombreDirectorio, string nombreSalida, char modo);
	int getCantDocumentos();
	void mergeSalidas(string rutaDirectorio);
private:
	int cantDocumentos;
	int cantBloques;
	double cantBytes;
	static bool sigue;
	static string auxs;
	static int ultimoCompuesto;
	bool agregarReferencia(string nomrebArchivo,string rutaReferencias,int index);
	bool esCaracterValido(char* caracter);
	bool esAlfanumerico(char* caracter);
	bool esSeguidoDeEspacio(char* linea,int i);
	bool esCompuestaEntreCaracteres(char* linea,int i,vector<string>* result);
	RegistroAuxiliar parsearArchivoAux(char* linea);
	bool cierraCompuesto(char* linea);
	bool volcarDatosArchivoAuxiliar(vector<RegistroAuxiliar> vectorAEscribir,
				string archivoSalida);
	int cantidadDigitos(int entrada);
	//bool sortingVector(RegistroAuxiliar registro1, RegistroAuxiliar registro2);
	void generarMatrizXBooleano(string nombreDirectorio, string nombreSalida);
	void generarMatrizXCantidad(string nombreDirectorio, string nombreSalida);
	void generarMatrizXTfIdf(string nombreDirectorio, string nombreSalida);
	void llenarVectorFrecuenciasMaximas(string nombreDirectorio, long* vec);
	vector <std::ifstream *> obtenerFileHandlersDeDirectorio(string rutaDirectorio);
	RegistroAuxiliar obtenerSiguienteRegistroDeArchivo(std::ifstream* archivoEntrada);
};

#endif /* ARCHIVOSUTIL_H_ */

